Software applications are more and more complex. Therefore, the software applications generally have a modular architecture, wherein each software application comprises multiple software components that interact among one another. The modular architecture breaks down the complexity of the software application, thereby significantly facilitating management (for example, design, development and maintenance) of the software application.
Moreover, different deployment configurations of each software application may be provided (for example, by building the software application according to corresponding settings), so that a system administrator may use the deployment configuration of the software application that is best suited to different execution environments (for example, test, production).
A typical example is in a cloud (computing) environment. The (cloud) software applications are supplied as services to users by cloud providers, which provision, configure and release corresponding computing resources upon request (so that actual implementation of the software applications is completely opaque to the users). This de-coupling of the software applications from the actual computing resources that implement the software applications provides the illusion of an infinite capacity thereof and improves exploitation of the software applications, especially for high-peak load conditions (by means of economies of scale). Moreover, the users are now relieved of the management of these computing resources (for example, installation and maintenance of these computing resources), and the users may perform tasks (on a pay-per-use basis) that were not feasible previously because of cost and complexity of these computing resources (especially for individuals and small companies).
The software components of each software application generally implement corresponding (micro) services. Each micro-service may invoke the other micro-services of the software application (in addition to external services) to provide the required functionality. The software application may then be deployed in a plurality of instances (for example, onto corresponding data centers distributed geographically) so that, a load balancer of the corresponding cloud provider may serve every request of the users with the instances of the software application that are closest to the cloud provider so as to increase responsiveness. Moreover, each instance of the software application may be deployed with multiple instances of the software application's software components implementing the micro-services, which allows distributing the workload of the software application and provides redundancy to increase reliability.
Different issues may adversely affect operation of the software application. Nevertheless, even if a situation all the instances of a software component become not available in a specific instance of the software application, the software application may continue working by invoking the corresponding micro-service (remotely) onto the other instances of the software application.
However, the preceding situation may degrade the performance of the software application. For example, a micro-service may now be invoked remotely onto an instance of the software application that is deployed in a data center far away from the data center of the software application wherein the micro-service is not available (for example, the micro-service is located in another continent). Therefore, a corresponding transmission time between these data centers adversely affect a response time of the software application accordingly, which may create a congestion in the instance of the software application such that the micro-service is invoked remotely, which degrades the response time as well.